home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / mac / Illustrator 6.0 SDK r1 Mac / AI Plugin Interface / AIFixedMath.h < prev    next >
Text File  |  1995-12-21  |  8KB  |  245 lines

  1.  
  2. /**
  3.  
  4.     AIFixedMath.h
  5.     Copyright (c) 1995 Adobe Systems Incorporated.
  6.     All Rights Reserved
  7.  
  8.     Adobe Illustrator 6.0 Fixed Point Math Suite.
  9.  
  10.  **/
  11.  
  12. #ifndef __AIFixedMath__
  13. #define __AIFixedMath__
  14.  
  15.  
  16. /*******************************************************************************
  17.  **
  18.  **    Imports
  19.  **
  20.  **/
  21.  
  22. #include "AITypes.h"
  23.  
  24.  
  25. #if Macintosh
  26.     #ifdef __cplusplus
  27.     extern "C" {
  28.     #endif
  29.     
  30.     #if PRAGMA_ALIGN_SUPPORTED
  31.     #pragma options align=mac68k
  32.     #endif
  33.     
  34.     #if PRAGMA_IMPORT_SUPPORTED
  35.     #pragma import on
  36.     #endif
  37. #endif
  38.  
  39.  
  40. /*******************************************************************************
  41.  **
  42.  **    Constants
  43.  **
  44.  **/
  45.  
  46. #define kAIFixedMathSuite        "AI Fixed Math Suite"
  47. #define kAIFixedMathVersion        2
  48.  
  49.  
  50. // common Fixed constants
  51. #define kFixedMin            ((Fixed) 0x80000000L)
  52. #define kFixedMax             ((Fixed) 0x7FFFFFFFL)
  53. #define kFixedUnknown         ((Fixed) 0x80000000L)
  54.  
  55. #ifndef kFixedOne
  56. #define kFixedOne            ((Fixed) 0x00010000L)
  57. #endif
  58. #ifndef kFixedZero
  59. #define kFixedZero            ((Fixed) 0x00000000L)
  60. #endif
  61. #define kFixedHundredth        ((Fixed) 0x0000028FL)
  62. #define kFixedSixteenth        ((Fixed) 0x00001000L)
  63. #define kFixedTenth            ((Fixed) 0x00001999L)
  64. #define kFixedEighth        ((Fixed) 0x00002000L)
  65. #ifndef kFixedQuarter
  66. #define kFixedQuarter         ((Fixed) 0x00004000L)
  67. #endif
  68. #ifndef kFixedHalf
  69. #define kFixedHalf             ((Fixed) 0x00008000L)
  70. #endif
  71. #define kFixedSevenEighths    ((Fixed) 0x0000E000L)
  72. #define kFixedOne1            ((Fixed) 0x0000FFFFL)
  73. #define kFixedOneThird        ((Fixed) 0x00005555L)
  74. #define kFixedFourThirds    ((Fixed) 0x00015555L)
  75. #define kFixedThreeHalves    ((Fixed) 0x00018000L)
  76.  
  77. #define kFixedPi4             ((Fixed) 0x0000C910L)
  78. #define kFixedPi2             ((Fixed) 0x00019220L)
  79. #define kFixedPi            ((Fixed) 0x00032440L)
  80. #define kFixedTwoPi         ((Fixed) 0x00064880L)
  81. #define kFixedGolden         ((Fixed) 0x00019E37L)
  82.  
  83. // common Fract constants
  84. #define kFractZero            ((Fract) 0x00000000L)
  85. #define kFractFixedRound    ((Fract) 0x00002000L)
  86. #define kFractPi180            ((Fract) 0x011DF4A0L)
  87. #define kFractQuarter        ((Fract) 0x10000000L)
  88. #define kFractHalf            ((Fract) 0x20000000L)
  89. #define kFractOne            ((Fract) 0x40000000L)
  90. #define kFractFourThirds    ((Fract) 0x55555555L)
  91. #define kFractSqrtTwo        ((Fract) 0x5A82799AL)
  92. #define kFractUnknown        ((Fract) 0x80000000L)
  93.  
  94.  
  95. /*******************************************************************************
  96.  **
  97.  **    Types
  98.  **
  99.  **/
  100.  
  101. typedef float Float;                // 4 byte IEEE
  102.  
  103. #if __BUILD_PLUGIN__
  104.  
  105. typedef unsigned long UFract;
  106.  
  107. typedef struct {
  108.     Fixed h, v;
  109. } FixedPoint;
  110.  
  111. typedef struct {
  112.     Fixed left, top, right, bottom;
  113. } FixedRect;
  114.  
  115. typedef struct {
  116.     Fixed a, b, c, d, tx, ty;
  117. } FixedMatrix;
  118.  
  119. #endif
  120.  
  121.  
  122. /*******************************************************************************
  123.  **
  124.  **    Macros
  125.  **
  126.  **/
  127.  
  128. #if __BUILD_PLUGIN__
  129.  
  130. // type conversion macros
  131. #define _FixedToFract(a)        ((Fract)(a) << 14)
  132. #define _FractRoundToFixed(a)    ((Fixed) (((a) + kFractFixedRound) >> 14))
  133. #define _FractTruncToFixed(a)    ((Fixed) ((a) >> 14))
  134.  
  135. #define _ShortToFixed(a)        ((Fixed)(a) << 16)
  136. #define _FixedRoundToShort(a)    ((short) (((a) + kFixedHalf) >> 16))
  137. #define _FixedTruncToShort(a)    ((short) ((a) >> 16))
  138.  
  139. #define _FloatToFixed(a)        ((Fixed)((a) * 65536.0))  // useful for constants; eg, _FloatToFixed(1.5) generates 0x00018000
  140.  
  141.  
  142. // other macros
  143. #define _FixedFloor(a)            ((Fixed) ((a) & 0xFFFF0000L))
  144. #define _FixedCeiling(a)        _FixedFloor((a) + kFixedOne1)
  145. #define _FixedRound(a)            _FixedFloor((a) + kFixedHalf)
  146. #define _FixedFraction(a)        ((a) & 0x0000FFFFL)
  147. #define _FixedAverage(a, b)     (((a) + (b) + 1) >> 1)
  148. #define _FixedHalf(a)             (((a) + 1) >> 1)
  149. #define _FixedOverflow(a)        ((a) == kFixedMax || (a) == kFixedMin)
  150.  
  151. #endif
  152.  
  153.  
  154. /*******************************************************************************
  155.  **
  156.  **    Suite
  157.  **
  158.  **/
  159.  
  160. typedef struct {
  161.  
  162.     MACPASCAL Fixed (*FixedAdd) ( Fixed a, Fixed b );
  163.     MACPASCAL Fixed (*FixedMul) ( Fixed a, Fixed b );
  164.     MACPASCAL Fract (*FractMul) ( Fract a, Fract b );
  165.     MACPASCAL Fixed (*FractFixedMul) ( Fract a, Fixed b );
  166.     MACPASCAL Fixed (*FixedDiv) ( Fixed a, Fixed b );
  167.     MACPASCAL Fract (*FractDiv) ( Fract a, Fract b );
  168.     MACPASCAL Fixed (*ShortRatio) ( short a, short b );
  169.     MACPASCAL Fract (*FixedRatio) ( Fixed a, Fixed b );
  170.     MACPASCAL Fixed (*FractRatio) ( Fract a, Fract b );
  171.     MACPASCAL Fixed (*FixedMulAdd) ( Fixed a, Fixed b, Fixed c, Fixed d );
  172.     MACPASCAL Fixed (*FixedMultiple) (Fixed a, Fixed multiple, Boolean ceiling );
  173.  
  174.     MACPASCAL Fract (*FixedSin) ( Fixed a );
  175.     MACPASCAL Fract (*FixedCos) ( Fixed a );
  176.     MACPASCAL Fixed (*FixedATan) ( Fixed a, Fixed b );
  177.     MACPASCAL Fixed (*DegreeToRadian) ( Fixed degree );
  178.     MACPASCAL Fixed (*RadianToDegree) ( Fixed radian );
  179.  
  180.     MACPASCAL UFract (*FractSqrt) ( UFract a );
  181.     MACPASCAL Fixed (*FixedLength) ( Fixed a, Fixed b );
  182.     MACPASCAL Fixed (*FixedInterpolate) ( Fixed a, Fixed b, Fixed t );
  183.  
  184.     MACPASCAL Float (*FixedToFloat) ( Fixed a );
  185.     MACPASCAL Fixed (*FloatToFixed) ( Float a );
  186.     MACPASCAL Float (*FractToFloat) ( Fract a );
  187.     MACPASCAL Fract (*FloatToFract) ( Float a );
  188.  
  189.     MACPASCAL void (*FixedPointAdd) ( FixedPoint *a, FixedPoint *b, FixedPoint *result );
  190.     MACPASCAL void (*FixedPointSubtract) ( FixedPoint *a, FixedPoint *b, FixedPoint *result );
  191.     MACPASCAL Boolean (*FixedPointEqual) ( FixedPoint *a, FixedPoint *b );
  192.     MACPASCAL Boolean (*FixedPointClose) ( FixedPoint *a, FixedPoint *b, Fixed tolerance );
  193.     MACPASCAL Fixed (*FixedPointAngle) ( FixedPoint *a, FixedPoint *b );
  194.     MACPASCAL Fixed (*FixedPointLength) ( FixedPoint *a, FixedPoint *b );
  195.     MACPASCAL void (*FixedPointLengthAngle) ( Fixed length, Fixed angle, FixedPoint *result );
  196.     MACPASCAL void (*FixedPointInterpolate) ( FixedPoint *a, FixedPoint *b, Fixed t, FixedPoint *result );
  197.  
  198.     MACPASCAL void (*FixedRectSet) ( FixedRect *a, Fixed left, Fixed top, Fixed right, Fixed bottom );
  199.     MACPASCAL Boolean (*FixedRectEqual) ( FixedRect *a, FixedRect *b );
  200.     MACPASCAL Boolean (*FixedRectEmpty) ( FixedRect *a );
  201.     MACPASCAL void (*FixedRectInset) ( FixedRect *a, Fixed h, Fixed v );
  202.     MACPASCAL void (*FixedRectOffset) ( FixedRect *a, Fixed h, Fixed v );
  203.     MACPASCAL void (*FixedRectUnion) ( FixedRect *a, FixedRect *b, FixedRect *result );
  204.     MACPASCAL void (*FixedPointUnion) ( FixedPoint *a, FixedRect *b, FixedRect *result );
  205.     MACPASCAL Boolean (*FixedRectOverlap) ( FixedRect *a, FixedRect *b );
  206.     MACPASCAL Boolean (*FixedRectIntersect) ( FixedRect *a, FixedRect *b, FixedRect *result );
  207.     MACPASCAL Boolean (*FixedRectInFixedRect) ( FixedRect *a, FixedRect *b );
  208.     MACPASCAL Boolean (*FixedPointInFixedRect) ( FixedPoint *a, FixedRect *b );
  209.     MACPASCAL void (*FixedRectAlign) ( FixedRect *a, FixedRect *result );
  210.  
  211.     MACPASCAL void (*FixedMatrixSet) ( FixedMatrix *m, Fixed a, Fixed b, Fixed c, Fixed d, Fixed tx, Fixed ty );
  212.     MACPASCAL void (*FixedMatrixSetIdentity) ( FixedMatrix *m );
  213.     MACPASCAL Boolean (*FixedMatrixEqual) ( FixedMatrix *m, FixedMatrix *n );
  214.     MACPASCAL Boolean (*FixedMatrixIdentity) ( FixedMatrix *m );
  215.     MACPASCAL Boolean (*FixedMatrixSingular) ( FixedMatrix *m );
  216.     MACPASCAL void (*FixedMatrixSetTranslate) ( FixedMatrix *m, Fixed tx, Fixed ty );
  217.     MACPASCAL void (*FixedMatrixSetScale) ( FixedMatrix *m, Fixed h, Fixed v );
  218.     MACPASCAL void (*FixedMatrixSetRotate) ( FixedMatrix *m, Fixed angle );
  219.     MACPASCAL void (*FixedMatrixConcatTranslate) ( FixedMatrix *m, Fixed tx, Fixed ty );
  220.     MACPASCAL void (*FixedMatrixConcatScale) ( FixedMatrix *m, Fixed h, Fixed v );
  221.     MACPASCAL void (*FixedMatrixConcatRotate) ( FixedMatrix *m, Fixed angle );
  222.     MACPASCAL void (*FixedMatrixConcat) (FixedMatrix *m, FixedMatrix *n, FixedMatrix *result );
  223.     MACPASCAL short (*FixedMatrixInvert) (FixedMatrix *m );
  224.     MACPASCAL void (*FixedMatrixXformPoint) ( FixedMatrix *m, FixedPoint *a, FixedPoint *result );
  225.  
  226. } AIFixedMathSuite;
  227.  
  228.  
  229. #if Macintosh
  230.     #if PRAGMA_IMPORT_SUPPORTED
  231.     #pragma import off
  232.     #endif
  233.     
  234.     #if PRAGMA_ALIGN_SUPPORTED
  235.     #pragma options align=reset
  236.     #endif
  237.     
  238.     #ifdef __cplusplus
  239.     }
  240.     #endif
  241. #endif
  242.  
  243.  
  244. #endif
  245.